"""
@Author  : 康帅
@Time    : 2021/6/22 17:06
@Function: urllib分析
"""

from urllib.parse import urlparse, urlsplit, urldefrag


def urllib_parse_urlparse():
    """
    urlparse() 函数的返回值是一个 ParseResult 对象，
    该对象与含有六个元素的元组 tuple 类似
    :return:
    方案 (scheme)
    网址 (network location)
    路径 (path)
    路径段 (path segment) 参数（用分号与路径隔开）
    查询字符串 (query)
    片段 (fragment)
    """
    url = "http://netloc/path;param?query=arg#frag"
    parsed = urlparse(url)
    print(parsed)


def urllib_parse_urlparseattrs():
    """
    获取url中存在的属性
    :return:
    """
    url = 'http://user:pwd@NetLoc:80/path;param?query=arg#frag'
    parsed = urlparse(url)
    print('scheme  :', parsed.scheme)
    print('netloc  :', parsed.netloc)
    print('path    :', parsed.path)
    print('params  :', parsed.params)
    print('query   :', parsed.query)
    print('fragment:', parsed.fragment)
    print('username:', parsed.username)
    print('password:', parsed.password)
    print('hostname:', parsed.hostname)
    print('port    :', parsed.port)


def urllib_parse_urlsplit():
    """
    urlsplit() 函数可以作为 urlparse() 的一个替代选择
    不同之处在于它不拆分 URL 里的参数

    由于参数没有被拆分出来，元组 API 仅显示五个元素，而不是六个，因为不再有 params 属性
    :return:
    """
    url = 'http://user:pwd@NetLoc:80/p1;para/p2;para?query=arg#frag'
    parsed = urlsplit(url)
    print(parsed)
    print('scheme  :', parsed.scheme)
    print('netloc  :', parsed.netloc)
    print('path    :', parsed.path)
    print('query   :', parsed.query)
    print('fragment:', parsed.fragment)
    print('username:', parsed.username)
    print('password:', parsed.password)
    print('hostname:', parsed.hostname)
    print('port    :', parsed.port)


def urllib_parse_urldefrag():
    """
    去掉 URL 里的片段 (fragment) 标识
    :return:
    """
    original = 'http://netloc/path;param?query=arg#frag'
    print('original:', original)
    # 移除fragment
    d = urldefrag(original)
    print('url     :', d.url)
    print('fragment:', d.fragment)


if __name__ == '__main__':
    urllib_parse_urlparse()
    urllib_parse_urlparseattrs()
    urllib_parse_urlsplit()
    urllib_parse_urldefrag()
